 # -*- coding: latin-1 -*-
import os
import shutil

import Code.Usu as Usu
import Code.BaseConfig as BaseConfig

import Code.Util as Util

#=========================================================================================
def compruebaCambioVersion( configuracion ) :
    v1 = "lk.pik"
    v2 = "lk2.pik"
    v30 = "lk30.pik"
    v35 = "lk35.pik"
    v40 = configuracion.carpeta + "/lk40.pik"
    v54 = configuracion.carpeta + "/lk54.pik"
    if os.path.isfile( v1 ) :
        dic = Util.recuperaDIC( v1 )
        Util.renombraNum( v1 )
        if dic :
            dic["MAXNIVEL0"] = dic["MAXNIVEL"]
            dic["MAXNIVELHECHO0"] = dic["MAXNIVELHECHO"]
            del dic["MAXNIVEL"]
            del dic["MAXNIVELHECHO"]
            dic["MAXNIVEL1"] = "0" if dic["MAXNIVEL0"] == "1" else "1"
            dic["MAXNIVELHECHO1"] = ""
            dic["MAXNIVEL2"] = "0"
            dic["MAXNIVELHECHO2"] = ""
            dic["MAXNIVEL3"] = "0"
            dic["MAXNIVELHECHO3"] = ""
            dic["MAXNIVEL4"] = "0"
            dic["MAXNIVELHECHO4"] = ""
            dic["MAXNIVEL5"] = "0"
            dic["MAXNIVELHECHO5"] = ""
            Util.guardaDIC( dic, v2 )

    if os.path.isfile( v2 ) :
        dic = Util.recuperaDIC( v2 )
        Util.renombraNum( v2 )
        if dic :

            dic["JUGADOR"] = dic["USUARIO"]
            configuracion.dirSalvados = dic["DIRSALVADOS"]
            configuracion.dirPGN = dic["DIRSALVADOS"]
            configuracion.siSuenaBeep = dic["SIBEEP"] == "S"
            configuracion.traductor = dic["TRADUCTOR"].lower()
            dic["TIEMPOTUTOR"] = configuracion.tiempoTutor
            dic["SIBEEP"] = configuracion.siSuenaBeep
            dic["DIRSALVADOS"] = configuracion.dirSalvados
            dic["DIRPGN"] = configuracion.dirPGN
            dic["TRADUCTOR"] = configuracion.traductor
            dic["SALVAR_FICHERO"] = configuracion.salvarFichero
            dic["SALVAR_GANADOS"] = configuracion.salvarGanados
            dic["SALVAR_PERDIDOS"] = configuracion.salvarPerdidos
            dic["RIVAL"] = configuracion.rivalInicial
            dic["TUTOR"] = configuracion.tutorInicial

            rv = configuracion.buscaRival( configuracion.rivalInicial )
            for num,cat in enumerate( rv.categorias.lista ) :
                cat.nivelHecho = int(dic[ "MAXNIVEL%d"%num ])
                cat.hecho = dic[ "MAXNIVELHECHO%d"%num ]
            dic["RIVAL_%s"%configuracion.rivalInicial] = rv.graba()

            Util.guardaDIC( dic, v30 )

    def cambiaRival( dic, antiguo, nuevo ) :
        claveN = "RIVAL_" + nuevo
        claveA = "RIVAL_" + antiguo
        if claveA in dic :
            cm = configuracion.buscaRival( nuevo )
            cm.lee( dic[claveA] )
            del dic[claveA]
            dic[claveN] = cm.graba()
    def borraRival( dic, antiguo ) :
        claveA = "RIVAL_" + antiguo
        if claveA in dic :
            del dic[claveA]

    if os.path.isfile( v30 ) :
        dic = Util.recuperaDIC( v30 )
        Util.renombraNum( v30 )
        if dic :
            cambiaRival( dic, "gfruit", "gaia" )
            cambiaRival( dic, "pawny", "bikjump" )
            cambiaRival( dic, "greko", "umko" )
            cambiaRival( dic, "bison", "critter" )
            borraRival( dic, "demon" )
            dic["ID"] = Usu.creaID()
            dic["SALVAR_FICHERO"] = ""
            dic["SALVAR_GANADOS"] = False
            dic["SALVAR_PERDIDOS"] = False
            Util.guardaDIC( dic, v35 )

    if os.path.isfile( v35 ) :

        def cambiaDir( fich ) :
            if os.path.isfile( fich ) :
                shutil.move( fich, configuracion.carpeta )
        cambiaDir( "listaMotores.pkt" )
        cambiaDir( "entmaquina.pke" )
        cambiaDir( "memo.pk" )
        cambiaDir( "gm.pke" )
        cambiaDir( "cliente.pke" )
        cambiaDir( "remnueva.pke" )
        cambiaDir( "remoto.pke" )

        dic = Util.recuperaDIC( v35 )
        Util.renombraNum( v35 )
        Util.guardaDIC( dic, v40 )

    if os.path.isfile( v40 ) :
        dic = Util.recuperaDIC( v40 )

        for k in dic :
            if k.startswith("RIVAL_") :
                txt = dic[k]
                li = txt.split(",")
                for n in range(len(li)) :
                    c = li[n]
                    if c.isdigit() and c != "0":
                        i = int(c)-1
                        li[n] = str(i)
                dic[k] = ",".join(li)
                if k.upper() == "RIVAL_TARRASCH" :
                    # tarrasch#PRINCIPIANTE,9,|AFICIONADO,8,|CANDIDATOMAESTRO,7,|MAESTRO,6,|CANDIDATOGRANMAESTRO,5,|GRANMAESTRO,4,
                    li = dic[k].split( "|" )
                    for n, t in enumerate(li) :
                        li1 = t.split(",")
                        pt = int(li1[1])
                        maximo = 9-n
                        if pt > maximo :
                            li1[1] = str(maximo)
                            li1[2] = "" # hecho
                            li[n] = ",".join(li1)
                    dic[k] = "|".join(li)

        Util.renombraNum( v40 )
        Util.guardaDIC( dic, configuracion.fichero )
        configuracion.lee()
        configuracion.graba()

    if os.path.isfile( v54 ) :
        dic = Util.recuperaDIC( v54 )

        def convierteTablero(id, tamDef, txt) :
            ct = BaseConfig.ConfigTablero(id,tamDef)
            tema = ct._tema
            base = ct._base
            li = txt.split( "#" )
            nli = len(li)
            if nli >= 5 :
                tema._colorExterior = int(li[0])
                ct.anchoPieza( int(li[1]) )
                tipoPieza = li[2]
                dic = {  "c":"Chessicons",
                         "m":"Merida",
                         "i":"Internet",
                         "s":"Spatial",
                         "f":"Fantasy",
                         "n":"NikNak",
                      }
                base._nomPiezas = dic.get(tipoPieza, "NikNak" )
                tema._colorBlancas = int(li[3])
                tema._colorNegras = int(li[4])
                tema._colorTexto = tema._colorBlancas
                tema._colorFrontera = tema._colorExterior
                if nli >= 6 :
                    txt = li[5]
                    if txt.isdigit() :
                        tema._fTransicion.color = int(txt)
                    else :
                        tema._fTransicion = Util.txt2dic(txt)
                    if nli >= 7 : # version 6.0
                        tema._colorTexto = int(li[6])
                        if nli >= 8 : # version 6.1
                            tema._colorFrontera = int(li[7])
                            if nli >= 9 : # version 6.2
                                ct.anchoPieza( 32 )
            return ct

        ct = convierteTablero("BASE", 48, dic["TABLERON"])
        ct._base._nCoordenadas = 4 if dic.get( "SICOORDENADAS4", True) else 2
        configuracion.cambiaConfTablero( ct )
        ct = configuracion.dicConfTableros["BASE"]
        ct = convierteTablero("TUTOR", 16, dic["TABLEROT"])
        configuracion.cambiaConfTablero( ct )

        # Temas propios
        ficheroTemas = configuracion.ficheroTemas
        liTemas = Util.recuperaVar( ficheroTemas )
        if liTemas :
            for nTema, tema in enumerate(liTemas) :
                ct = convierteTablero("BASE", 48, tema["CONFIG"]) # temporal
                tema["TEXTO"] = ct._tema.graba()
                del tema["CONFIG"]
            Util.guardaVar( ficheroTemas, liTemas )

        Util.renombraNum( v54 )
        Util.guardaDIC( dic, configuracion.fichero )
        configuracion.lee()
        configuracion.graba()
